// 引入Vue Router相关功能
import { createRouter, createWebHashHistory } from 'vue-router'
import Login from '../views/Login.vue'
import MainBox from '../views/MainBox.vue'
import RoutesConfig from './config'  // 导入路由配置（包含权限信息）
import store from '../store/index'   // 导入Vuex存储

/**
 * 基础路由配置
 * 包含无需权限验证的公共路由
 */
const routes = [
  {
    path: "/login",
    name: "login",
    component: Login
  },
  {
    path: "/mainbox",
    name: "mainbox",
    component: MainBox
  },
  // mainbox嵌套路由将根据权限动态添加
]

// 创建路由实例，使用哈希模式
const router = createRouter({
  history: createWebHashHistory(),
  routes
})

/**
 * 动态配置路由（根据用户权限）
 * 1. 确保主路由存在
 * 2. 根据权限过滤并添加子路由
 * 3. 标记路由已配置
 */
const ConfigRouter = () => {
  // 确保主路由存在（避免重复添加）
  if(!router.hasRoute("mainbox")){
    router.addRoute({
      path: "/mainbox",
      name: "mainbox",
      component: MainBox
    })
  }

  // 根据用户权限过滤并添加子路由
  RoutesConfig.forEach(item => {
    checkPermission(item) && router.addRoute("mainbox", item)
  })

  // 标记路由已配置，避免重复处理
  store.commit("changeGetterRouter", true)
}

/**
 * 全局前置守卫
 * 控制路由访问权限和动态路由加载
 */
router.beforeEach((to, from, next) => {
  // 登录页直接放行
  if (to.name === "login") {
    next()
  } else {
    // 检查是否有token（用户是否已登录）
    if (!localStorage.getItem("token")) {
      next({ path: "/login" })  // 未登录，重定向到登录页
    } else {
      // 已登录，但路由尚未根据权限配置
      if (!store.state.isGetterRouter) {
        // 移除主路由，重新配置（确保权限更新生效）
        router.removeRoute("mainbox")
        ConfigRouter()
        // 重新导航到目标路径（确保动态路由生效）
        next({ path: to.fullPath })
      } else {
        next()  // 路由已配置，直接放行
      }
    }
  }
})

/**
 * 权限检查函数
 * @param {Object} route - 路由配置项
 * @returns {Boolean} - 是否有权限访问
 */
const checkPermission = (item) => {
  // 如果路由需要管理员权限，检查用户角色是否为管理员（1）
  if (item.requireAdmin) {
    return store.state.userInfo.role === 1
  }
  return true  // 默认允许访问
}

export default router